﻿/**
 * jQuery ligerUI 1.1.8
 * 
 * http://ligerui.com
 * 
 * Author daomi 2012 [ gd_star@163.com ]
 * 
 */
(function($){
  $.fn.ligerAccordion=function(options){
    return $.ligerui.run.call(this,"ligerAccordion",arguments);
  };
  
  $.fn.ligerGetAccordionManager=function(){
    return $.ligerui.get(this);
  };
  
  $.ligerDefaults.Accordion={
    height:null,
    speed:"normal",
    changeHeightOnResize:false,
    heightDiff:0,
    selectedIndex:0,
    selected:true
  };
  $.ligerMethos.Accordion={};
  
  $.ligerui.controls.Accordion=function(element,options){
    $.ligerui.controls.Accordion.base.constructor.call(this,element,options);
  };
  $.ligerui.controls.Accordion.ligerExtend($.ligerui.core.UIComponent,{
    __getType:function(){
      return 'Accordion';
    },
    __idPrev:function(){
      return 'Accordion';
    },
    _extendMethods:function(){
      return $.ligerMethos.Accordion;
    },
    _render:function(){
      var g=this,p=this.options;
      g.accordion=$(g.element);
      if(!g.accordion.hasClass("l-accordion-panel"))
        g.accordion.addClass("l-accordion-panel");
      var selectedIndex=p.selectedIndex;
      var selected=p.selected;
      if($("> div[lselected=true]",g.accordion).length>0)
        selectedIndex=$("> div",g.accordion).index($("> div[lselected=true]",g.accordion));
      
      $("> div",g.accordion).each(function(i,box){
        var header=$('<div class="l-accordion-header"><div class="l-accordion-toggle"></div><div class="l-accordion-header-inner"></div></div>');
        if(i==selectedIndex&&selected)
          $(".l-accordion-toggle",header).addClass("l-accordion-toggle-open");
        if($(box).attr("title")){
          $(".l-accordion-header-inner",header).html($(box).attr("title"));
          $(box).attr("title","");
        }
        $(box).before(header);
        if(!$(box).hasClass("l-accordion-content"))
          $(box).addClass("l-accordion-content");
      });
      
      // add Even
      $(".l-accordion-toggle",g.accordion).each(function(){
        if(!$(this).hasClass("l-accordion-toggle-open")&&!$(this).hasClass("l-accordion-toggle-close")){
          $(this).addClass("l-accordion-toggle-close");
        }
        if($(this).hasClass("l-accordion-toggle-close")){
          $(this).parent().next(".l-accordion-content:visible").hide();
        }
      });
      $(".l-accordion-header",g.accordion).hover(function(){
        $(this).addClass("l-accordion-header-over");
      },function(){
        $(this).removeClass("l-accordion-header-over");
      });
      $(".l-accordion-toggle",g.accordion).hover(function(){
        if($(this).hasClass("l-accordion-toggle-open"))
          $(this).addClass("l-accordion-toggle-open-over");
        else if($(this).hasClass("l-accordion-toggle-close"))
          $(this).addClass("l-accordion-toggle-close-over");
      },function(){
        if($(this).hasClass("l-accordion-toggle-open"))
          $(this).removeClass("l-accordion-toggle-open-over");
        else if($(this).hasClass("l-accordion-toggle-close"))
          $(this).removeClass("l-accordion-toggle-close-over");
      });
      $(">.l-accordion-header",g.accordion).click(function(){
        var togglebtn=$(".l-accordion-toggle:first",this);
        if(togglebtn.hasClass("l-accordion-toggle-close")){
          togglebtn.removeClass("l-accordion-toggle-close").removeClass("l-accordion-toggle-close-over l-accordion-toggle-open-over")
          togglebtn.addClass("l-accordion-toggle-open");
          $(this).next(".l-accordion-content").show(p.speed).siblings(".l-accordion-content:visible").hide(p.speed);
          $(this).siblings(".l-accordion-header").find(".l-accordion-toggle").removeClass("l-accordion-toggle-open").addClass("l-accordion-toggle-close");
        }else{
          togglebtn.removeClass("l-accordion-toggle-open").removeClass("l-accordion-toggle-close-over l-accordion-toggle-open-over").addClass("l-accordion-toggle-close");
          $(this).next(".l-accordion-content").hide(p.speed);
        }
      });
      // init
      g.headerHoldHeight=0;
      $("> .l-accordion-header",g.accordion).each(function(){
        g.headerHoldHeight+=$(this).height();
      });
      if(p.height&&typeof(p.height)=='string'&&p.height.indexOf('%')>0){
        g.onResize();
        if(p.changeHeightOnResize){
          $(window).resize(function(){
            g.onResize();
          });
        }
      }else{
        if(p.height){
          g.height=p.heightDiff+p.height;
          g.accordion.height(g.height);
          g.setHeight(p.height);
        }else{
          g.header=g.accordion.height();
        }
      }
      
      g.set(p);
    },
    onResize:function(){
      var g=this,p=this.options;
      if(!p.height||typeof(p.height)!='string'||p.height.indexOf('%')==-1)
        return false;
      // set accordion height
      if(g.accordion.parent()[0].tagName.toLowerCase()=="body"){
        var windowHeight=$(window).height();
        windowHeight-=parseInt(g.layout.parent().css('paddingTop'));
        windowHeight-=parseInt(g.layout.parent().css('paddingBottom'));
        g.height=p.heightDiff+windowHeight*parseFloat(g.height)*0.01;
      }else{
        g.height=p.heightDiff+(g.accordion.parent().height()*parseFloat(p.height)*0.01);
      }
      g.accordion.height(g.height);
      g.setContentHeight(g.height-g.headerHoldHeight);
    },
    setHeight:function(height){
      var g=this,p=this.options;
      g.accordion.height(height);
      height-=g.headerHoldHeight;
      $("> .l-accordion-content",g.accordion).height(height);
    }
  });
  
})(jQuery);
